'use strict'

/**
 * <--    还原前    -->
var a = 1;    // this is a single comment

/**
 * this is a multiple comments
 * test
 * test
 * test
 * /
var b = 2;
 * 
 * <--    特点    -->
 * 无
 * 
 * <--    解决办法    -->
 * 1. 一开始利用astexplore，查看节点，发现注释（CommentLine, CommentBlock）位于顶层，通过Programe进入路径，
 *    虽然能访问到一个comments数组，但是每个成员均不属于CommentLine或CommentBlock类型对象
 *    实际上，在`@babel/types`中本身就尚未定义CommentLine、CommentBlock类型节点，所以无论对这个数组做[]或者delete，都无济于事
 *    看来babel还是建立在他自身定义的合法节点类型基础上的
 * 2. 看蔡老板的文档，在generator中做文章（调用时可配置多种选项<options>）
 * 
 * <--    冗余判断    -->
 * 无
 * 
 * <--    还原后    -->
var a = 1;
var b = 2;
 * 
 **/

const {parse} = require('@babel/parser');
const traverse = require('@babel/traverse').default;
const t = require('@babel/types');
const generator = require('@babel/generator').default;

let code = `
var a = 1;    // this is a single comment

/**
 * this is a multiple comments
 * test
 * test
 * test
 **/
var b = 2;`

const visitor = {
    Program:{
        enter:function(path){
            // programPath.parent -> FileNode; programPath.parentPath -> null
            console.log(path.parent.comments)
            delete path.parent.comments;
        },
    },
}

let ast = parse(code);
// traverse(ast, visitor);
console.log(generator(ast, {'comments': false}).code);

